package aggregate

import (
	"context"
)

// DefaultEventService EventService接口的默认实现
type DefaultEventService struct {
	// eventChan 事件通道，用于传递事件
	eventChan chan Event
}

// NewDefaultEventService 创建默认事件服务实例
func NewDefaultEventService() *DefaultEventService {
	return &DefaultEventService{
		eventChan: make(chan Event, 10), // 带缓冲的通道，防止阻塞
	}
}

// subscribe 订阅事件流
func (s *DefaultEventService) subscribe() <-chan Event {
	// 直接返回事件通道
	return s.eventChan
}

// publish 发布事件
func (s *DefaultEventService) publish(ctx context.Context, event Event) error {
	// 使用select防止阻塞
	select {
	case s.eventChan <- event:
		return nil
	case <-ctx.Done():
		return ctx.Err()
	default:
		// 通道满了，丢弃事件避免阻塞
		return nil
	}
}
